package com.yueqian.bookshop.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mysql.jdbc.StringUtils;
import com.yueqian.bookshop.bean.BookType;
import com.yueqian.bookshop.bean.RtnInfo;
import com.yueqian.bookshop.mapper.BookTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * booktype对应的controller
 */
@RestController
@RequestMapping("/booktype")
public class BookTypeController {
    @Resource
    private BookTypeMapper bookTypeMapper;

    /**
     * 添加图书类别
     * 请求方式：POST
     * 请求URL：/bookshop/booktype/add
     * 请求参数：表单
     * 响应结果：JSON字符串
     * @param bookType
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "add",method = RequestMethod.POST)
    public RtnInfo add(BookType bookType) throws Exception{
        System.out.println("--进入到了图书类别添加："+bookType);
        // 创建一个rtnInfo对象，用来封装响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空校验
        if(StringUtils.isNullOrEmpty(bookType.getBooktypeName())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别名称不能为空！");
        }else if(StringUtils.isNullOrEmpty(bookType.getBooktypeDepict())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别描述为空！");
        }else{
            // 访问数据库
            if(bookTypeMapper.addBookType(bookType)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("图书类别添加成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("图书类别添加失败！");
            }
        }
        return rtnInfo;
    }

    /**
     * 查询所有图书类别（支持关键字，不支持分页）
     * 请求方式：GET
     * 请求url：/bookshop/booktype/findAll/关键字/当前页码
     * 响应结果：JSON字符串
     * @param booktypeName
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "findAll/{booktypeName}/{currentPage}",method = RequestMethod.GET)
    public RtnInfo findAll(@PathVariable(value = "booktypeName",required = true)String booktypeName,
                           @PathVariable(value = "currentPage",required = false)Integer currentPage) throws Exception{
        System.out.println("--进入到了图书类别列表查询："+booktypeName);

        // 创建一个rtnInfo,封装响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 对关键字进行非空校验
        // 注意：如果要查询所有，就送一个 单引号占位置
        if(StringUtils.isNullOrEmpty(booktypeName)|| booktypeName.equals("''")){
            booktypeName = "";
        }
        // 非空校验
        if(currentPage==null){
            currentPage = 1;// 如果没有获取到前端传递的当前页，就默认第一页
        }
        // 1. 访问数据库之前，需要设置分页条件,两个参数：pageNum-当前是第几页，pageSize=每页显示的条目数
        PageHelper.startPage(currentPage,5);
        // 2. 访问数据库
        List<BookType> list = bookTypeMapper.findBookTypeAll(booktypeName);
        // 3. 访问数据库之后，封装数据
        PageInfo<BookType> lists = new PageInfo<>(list,5);
        System.out.println("-----booktype-list:"+lists);
        if(list!=null){
            // 封装信息到前端
            rtnInfo.setCode(1);
            rtnInfo.setMsg("图书类别列表信息获取成功！");
            rtnInfo.setResult(lists);
        }else{
            // 封装信息到前端
            rtnInfo.setCode(0);
            rtnInfo.setMsg("图书类别列表信息获取失败！");
        }

        return rtnInfo;
    }

    /**
     * 查询所有图书类别（给下拉框使用）
     * 请求方式：GET
     * 请求url：/bookshop/booktype/queryList
     * 响应结果：JSON字符串
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "queryList",method = RequestMethod.GET)
    public RtnInfo queryList() throws Exception{
        System.out.println("--进入到了图书类别列表查询(下拉列表框使用)：");
        // 创建一个rtnInfo,封装响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 访问数据库
        List<BookType> list = bookTypeMapper.findBookTypeAll("");
        System.out.println("-----booktype-list:"+list);
        if(list!=null){
            // 封装信息到前端
            rtnInfo.setCode(1);
            rtnInfo.setMsg("图书类别列表信息获取成功！");
            rtnInfo.setResult(list);
        }else{
            // 封装信息到前端
            rtnInfo.setCode(0);
            rtnInfo.setMsg("图书类别列表信息获取失败！");
        }

        return rtnInfo;
    }

    /**
     * 根据编号修改图书类别
     * 请求方式：POST
     * 请求URL：/bookshop/booktype/update
     * 请求参数：表单
     * 响应结果：JSON字符串
     * @param bookType
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "update",method = RequestMethod.POST)
    public RtnInfo update(BookType bookType) throws Exception{
        System.out.println("--进入到了图书类别修改方法："+bookType);
        // 创建一个rtnInfo，用来封装需要响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空检验
        if(StringUtils.isNullOrEmpty(bookType.getBooktypeId()+"")){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别编号不能为空！");
        }else if(StringUtils.isNullOrEmpty(bookType.getBooktypeName())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别名称不能为空！");
        }else if(StringUtils.isNullOrEmpty(bookType.getBooktypeDepict())){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别描述不能为空！");
        }else{
            // 访问数据库
            if(bookTypeMapper.updateBookType(bookType)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("图书类别修改成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("图书类别修改失败！");
            }
        }
        return rtnInfo;
    }

    /**
     * 根据编号删除图书类别
     * 请求方式：GET
     * 请求URL：/bookshop/booktype/delete/{booktypeId}
     * 响应结果：JSON字符串
     * @param booktypeId
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "delete/{booktypeId}")
    public RtnInfo delete(@PathVariable(value = "booktypeId",required = true)Integer booktypeId) throws Exception{
        System.out.println("--进入到了图书类别删除方法："+booktypeId);
        // 创建一个rtnInfo对象，用来封装需要响应到前端的信息
        RtnInfo rtnInfo = new RtnInfo();
        // 非空检验
        if(StringUtils.isNullOrEmpty(booktypeId+"")){
            rtnInfo.setCode(-1);
            rtnInfo.setMsg("图书类别编号不能为空！");
        }else{
            // 访问数据库
            if(bookTypeMapper.deleteBookType2(booktypeId)>0){
                rtnInfo.setCode(1);
                rtnInfo.setMsg("图书类别删除成功！");
            }else{
                rtnInfo.setCode(0);
                rtnInfo.setMsg("图书类别删除失败！");
            }
        }
        return rtnInfo;
    }
}
